package lx14_动态代理;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ddp {
    //类的作用：创建一个代理
    public static Star CreatProxy(SuperStar s){
        //给一个明星对象，创建其代理

        //参数一：类加载器，去加载生成的代理类
        //参数二：接口，这些接口用于指定生成的代理长什么样，也就是有哪些方法
        //参数三：指定生成的代理对象 干的事情
        Star star = (Star) Proxy.newProxyInstance(
                ddp.class.getClassLoader(),
                new Class[]{Star.class},
                new InvocationHandler() {
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

                        /*参数一：代理的对象
                          参数二：要执行的方法m
                          参数三：执行方法m时的参数
                        * */
                        if("sing".equals(method.getName())){
                            System.out.println("sing");
                        }
                        else if("dance".equals(method.getName())){
                            System.out.println("dance");
                        }

                        //利用反射调用方法
                        //s这个对象,执行method方法
                        return method.invoke(s,args);

                    }
                }
        );

        return star;
    }
}
